from django.db import models

# Create your models here.
"""
1.模型类继承  models.Model
2.定义属性
    (1)属性名=model.类型（选项）
        属性名 对应 字段名
        注: 1.不要使用关键字
            2.不要使用连续的下划线
    (2)类型 为 Mysql类型
    (3)选项 是否有默认值，是否唯一，是否可null
        注: 1.Charfield 必须设置 max_length
            2.verbose_name 主要是 admin站点使用
3.改变表的名称
    默认表的名称是：子应用名_类名 都是小写
    修改表名

        
"""


class BookInfo(models.Model):
    name = models.CharField(max_length=10, unique=True, verbose_name='名称')
    pub_date = models.DateField(null=True)
    readcount = models.IntegerField(default=0)
    commentcount = models.IntegerField(default=0)
    is_delete = models.BooleanField(default=False)

    # 1对多模型中  系统自动添加一个关联字段(关联模型类名小写_set)：
    # peopleinfo_set=[PeopleInfo,PeopleInfo,……]

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'bookinfo'  # 修改表的名字
        verbose_name = '书籍管理'  # admin站点使用


class PeopleInfo(models.Model):
    # 定义一个有序字典
    GENDER_CHOICE = (
        (0, 'unknow'),
        (1, 'male'),
        (2, 'female')
    )
    name = models.CharField(max_length=10, unique=True)
    gender = models.SmallIntegerField(choices=GENDER_CHOICE, default=0)
    description = models.CharField(max_length=100, null=True)
    is_delete = models.BooleanField(default=False)

    # 外键
    # 系统会自动为外键添加_id

    # 外键的级联操作
    # 主表 和 从表
    # 1 对 多
    # 书籍 对 人物

    # 主表的一条数据如果删除了
    # 从表有关数据会：
    #   SET_NULL/抛出异常/级联删除

    book = models.ForeignKey(BookInfo, on_delete=models.CASCADE)

    # book=BookInfo()  多对一 会实例化一个'一'的对象

    class Meta:
        db_table = 'peopleinfo'  # 修改表的名字

    def __str__(self):
        return self.name
